package Day5Zuoye;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class Baidu2 {
    public static void main(String[] args) throws IOException {
        //    Java中的RandomAccessFile提供了对文件的读写功能。
//    RandomAccessFile 虽然属于java.io下的类，但它不是InputStream或者OutputStream的子类；
//    它也不同于FileInputStream和FileOutputStream。
//    FileInputStream 只能对文件进行读操作，而FileOutputStream 只能对文件进行写操作；
//    但是，RandomAccessFile 与输入流和输出流不同之处就是RandomAccessFile可以访问文件的任意地方同时支持文件的读和写，并且它支持随机访问。
//    RandomAccessFile包含InputStream的三个read方法，也包含OutputStream的三个write方法。
//    同时RandomAccessFile还包含一系列的readXxx和writeXxx方法完成输入输出。


        //写一个文件, 写入26个小写字母，再打开这个文件, 把前10个换成大写字母,后10个替换为数字字符.
        File file = new File("text5.txt");
        RandomAccessFile raf = new RandomAccessFile(file, "rw");
        for (int i = 0; i < 26; i++) {
            raf.write('a' + i); // 循环写入26个小写字母
        }
        byte[] temp = new byte[10];
        raf.seek(0);
        raf.read(temp, 0, 10);// 从0位置读取10个字节的数据存入temp字节数组
        raf.seek(0);
        for (long i = 0; i < 10; i++) {
            raf.write(temp[(int) i] - 32);// 从0位置循环写入大写字母
        }
        long pos = raf.length() - 10;
        raf.seek(pos);
        raf.read(temp, 0, 10);// 从pos位置读取10个字节数据到temp字节数组
        raf.seek(pos);
        for (long i = 0; i < 10; i++) {
            // 循环写入字符转化的数字
            raf.writeBytes(String.valueOf((int) temp[(int) i]));
        }
        raf.close();
    }
}
